/*
 * Estudiante.h
 *
 *  Created on: Nov 8, 2012
 *      Author: Carlos Alegría
 */

#ifndef ESTUDIANTE_H_
#define ESTUDIANTE_H_

#include "Persona.h"
#include "Beca.h"
#include <string>
#include <iostream>

using namespace std;

namespace poo
{

  class Estudiante : public virtual Persona
  {

    friend ostream &
    operator<<(ostream &, const Estudiante *);

  public:
    Estudiante(const string &nombreCompleto, const string &direccion, int edad,
        const string &noDeCuenta, NivelDeEstudios nivel, int semestre);

    virtual
    ~Estudiante();

    inline const Beca*
    getBeca() const
    {
      return beca;
    }

    inline NivelDeEstudios
    getNivel() const
    {
      return nivel;
    }

    inline void
    setNivel(NivelDeEstudios nivel)
    {
      this->nivel = nivel;
    }

    inline const string&
    getNoDeCuenta() const
    {
      return noDeCuenta;
    }

    inline void
    setNoDeCuenta(const string& noDeCuenta)
    {
      if (!noDeCuenta.empty())
        {
          this->noDeCuenta = noDeCuenta;
        }
    }

    inline float
    getPromedio() const
    {
      return promedio;
    }

    inline void
    setPromedio(float promedio)
    {
      if (promedio > 0 && promedio < 10)
        {
          this->promedio = promedio;
        }
    }

    inline int
    getSemestre() const
    {
      return semestre;
    }

    inline void
    setSemestre(int semestre)
    {
      if (semestre > 0)
        {
          this->semestre = semestre;
        }
    }

  private:
    string noDeCuenta;
    NivelDeEstudios nivel;
    int semestre;
    float promedio;
    Beca *beca;
  };

} /* namespace poo */
#endif /* ESTUDIANTE_H_ */
